import 'package:dio/dio.dart';

class DioHttp {
  final Dio _dio = Dio();
  // 数据请求域名
  static const String _baseUrl = 'http://192.168.10.77';

  DioHttp() {
    headerInit();

    // 添加请求前拦截器
    _dio.interceptors.add(InterceptorsWrapper(
      onRequest: (options, handler) {
        print("请求前拦截触发");
        // 打印请求的地址
        print('Request Url: ${options.uri}');
        // 在请求前的拦截器中可以执行一些操作，例如添加通用的请求头
        options.headers['Content-Type'] = "application/json;charset=utf-8";
        return handler.next(options); // 继续请求
      },
    ));

    // 添加请求后拦截器
    _dio.interceptors.add(InterceptorsWrapper(
      onResponse: (response, handler) {
        print("结束请求拦截触发");
        // 在请求后的拦截器中可以执行一些操作，例如日志记录
        print('Response Status Code: ${response.statusCode}');
        return handler.next(response); // 继续后续操作
      },
    ));
  }

  void headerInit() {
    // 设置通用的基础URL
    _dio.options.baseUrl = _baseUrl;

    // 设置请求头，这里用于携带认证数据（例如令牌）
    _dio.options.headers['Authorization'] = 'Bearer 你的token值';

    _dio.options.connectTimeout = 30000;
  }

  // 发起GET请求
  Future<Response> get(String path, {Map<String, dynamic>? queryParameters}) {
    return _dio.get(path, queryParameters: queryParameters);
  }

  // 发起POST请求
  Future<Response> post(String path, {dynamic data}) {
    return _dio.post(path, data: data);
  }

  // 发起PUT请求
  Future<Response> put(String path, {dynamic data}) {
    return _dio.put(path, data: data);
  }

  // 发起多个请求
  Future<List<Response>> batchRequests(List<RequestOptions> requests) {
    final futures = requests.map((request) {
      final options = Options(
        method: request.method,
        headers: request.headers,
        responseType: ResponseType.json, // 设置响应类型
      );
      return _dio.request(request.path, options: options, data: request.data);
    }).toList();

    return Future.wait(futures);
  }
}

